package org.x.user.controller;

import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.x.common.config.Result;
import org.x.common.enums.LogAsync;
import org.x.user.dto.CreateMenuDTO;
import org.x.user.dto.MenuQueryDTO;
import org.x.user.service.ISysMenuService;


/**
 * 菜单表 控制层。
 *
 * @author mybatis-flex-helper automatic generation
 * @since 1.0
 */
@RestController
@RequestMapping("/api/menu")
public class SysMenuController {

    @Autowired
    private ISysMenuService sysMenuService;

    /**1. 功能清单
     功能点	      请求类型	   接口URL	             功能说明
     创建菜单	    POST	/api/menu/create	    创建新菜单项
     修改菜单信息 	PUT 	/api/menu/update	    更新菜单基本信息
     删除菜单	    DELETE	 /api/menu/delete/	    逻辑删除菜单（标记is_delete=1）
     菜单分页查询 	GET 	/api/menu/list	    分页查询菜单列表
     菜单详情查询	    GET 	/api/menu/detail/	获取菜单完整信息
     菜单树查询	    GET 	/api/menu/tree	    获取完整菜单树结构（包含父子关系）
     菜单排序调整	    PUT 	/api/menu/sort	    调整菜单排序和层级关系
     */
    @LogAsync("创建菜单")
    @PostMapping("/create")
    public Result create(@RequestBody CreateMenuDTO createMenuDTO) {
        int menuId = sysMenuService.createMenu(createMenuDTO);
        return Result.ok(menuId);
    }

    /*** 修改菜单信息*/
    @LogAsync("修改菜单")
    @PutMapping("/update")
    public Result update(@RequestBody CreateMenuDTO createMenuDTO) {
        sysMenuService.update(createMenuDTO);
        return Result.ok();
    }


    /***逻辑删除 删除菜单*/
    @LogAsync("逻辑删除菜单")
    @DeleteMapping("/delete/{id}")
    public Result delete(@PathVariable Long id) {
        sysMenuService.isDelete(id);
        return Result.ok();
    }
    //菜单分页查询
    @LogAsync("菜单分页查询")
    @GetMapping("/list")
    public Result list(@ModelAttribute MenuQueryDTO menuQueryDTO) {
        return Result.ok(sysMenuService.pageList(menuQueryDTO));
    }
    //菜单详情查询
    @LogAsync("菜单详情查询")
    @GetMapping("/detail/{id}")
    public Result detail(@PathVariable Long id) {
        return Result.ok(sysMenuService.getByIddetail(id));
    }

    //菜单树查询
    @LogAsync("菜单树查询")
    @GetMapping("/tree")
    public Result tree() {
        return Result.ok(sysMenuService.tree());
    }

}